package br.com.tcc.gp.controlador;

import java.util.ArrayList;
import java.util.List;

import br.com.tcc.gp.dao.PessoaDAO;
import br.com.tcc.gp.execoes.GestaoException;
import br.com.tcc.gp.modelo.Endereco;
import br.com.tcc.gp.modelo.Pessoa;

public class ControlePessoa {

	Pessoa pessoa;
	PessoaDAO pessoaDAO;
	ControleEndereco controleEndereco;
	List<Pessoa> lista;
	int linhas = 0;

	public ControlePessoa() {
		lista = new ArrayList<Pessoa>();
		pessoaDAO = new PessoaDAO();
		controleEndereco = new ControleEndereco();
	}

	public int salvar(Pessoa p, Endereco end) {
		try {
			linhas = controleEndereco.salvar(end);
			if (linhas != 0) {
				Endereco end2 = controleEndereco.pesquisar(end.getEmail());
				p.setEndereco(end2);
				linhas += pessoaDAO.salvar(p);
			} else if (linhas > 2)
				throw new GestaoException("Erro ao listar pessoa");
		} catch (GestaoException e) {
			e.printStackTrace();
		}
		return linhas;
	}

	public List<Pessoa> listar() {
		try {
			lista = pessoaDAO.lista();
			if (lista == null)
				throw new GestaoException("Erro ao listar pessoa");
		} catch (GestaoException e) {
			e.printStackTrace();
		}
		return lista;
	}

	public int alterar(Pessoa pessoa, Endereco endereco) {
		try {
			linhas = pessoaDAO.alterar(pessoa);
			if (linhas > 0)
				linhas += controleEndereco.alterar(endereco);
			else if (linhas < 2)
				throw new GestaoException("Erro ao alterar pessoa");
		} catch (GestaoException e) {
			e.printStackTrace();
		}
		return linhas;
	}

	public Pessoa pesquisar(int codigo) {
		try {
			pessoa = pessoaDAO.pesquisar(codigo);
			if (pessoa == null)
				throw new GestaoException("Erro ao pesquisar pessoa");
		} catch (GestaoException e) {
			e.printStackTrace();
		}
		return pessoa;
	}

	public Pessoa pesquisar(Pessoa pessoa) {
		try {
			pessoa = pessoaDAO.pesquisar(pessoa);
			if (pessoa == null)
				throw new GestaoException("Erro ao pesquisar pessoa");
		} catch (GestaoException e) {
			e.printStackTrace();
		}
		return pessoa;
	}

	public int deletar(Pessoa pessoa) {
		try {
			linhas = pessoaDAO.deletar(pessoa);
			if (linhas > 0)
				linhas += controleEndereco.deletar(pessoa.getEndereco().getCodigo());
			else if (linhas < 2)
				throw new GestaoException("Erro ao deletar pessoa e endereco.");
		} catch (GestaoException e) {
			e.printStackTrace();
		}
		return linhas;
	}

}